package edu.tfh.s2.ehkbot.steuerung.schnittstellen.simulation;

import java.util.HashMap;
import java.util.Vector;

import edu.tfh.s2.ehkbot.daten.Protokoll;
import edu.tfh.s2.ehkbot.steuerung.schnittstellen.Netzwerk;
/**
 * Implementiert das State für den Zustand Simulation vom Netzwerk.
 * 
 * @author s2zehn
 */
public class NetzwerkStateSimulation implements Netzwerk.NetzwerkState, Cloneable {
	/*
	 * Hier drin werden die Nachrichten gespeichert.
	 */
	private HashMap<String, Vector<byte[]>> buffer = new HashMap<String, Vector<byte[]>>();;

	/**
	 * @see java.lang.Object#clone()
	 */
	@Override
	public Object clone() {
		return new NetzwerkStateSimulation();
	}

	/**
	 * @see edu.tfh.s2.ehkbot.steuerung.schnittstellen.Netzwerk.NetzwerkState#getNachricht(java.lang.String)
	 */
	@Override
	public byte[] getNachricht(String port) {
		if (!buffer.containsKey(port))
			return null;
		if (buffer.get(port).size() == 0)
			return null;

		byte[] s = buffer.get(port).firstElement(); // hollt das erste element
													// raus (fifo)
		buffer.get(port).remove(0); // entfernt das element aus dem Vector
		return s;
	}

	/**
	 * @see edu.tfh.s2.ehkbot.steuerung.schnittstellen.Netzwerk.NetzwerkState#isNachrichtDa(java.lang.String)
	 */
	@Override
	public boolean isNachrichtDa(String port) {
		return buffer.containsKey(port) && buffer.get(port).size() != 0;
	}
	
	/**
	 * @see edu.tfh.s2.ehkbot.steuerung.schnittstellen.Netzwerk.NetzwerkState#sendeNachricht(byte[], java.lang.String)
	 */
	@Override
	public void sendeNachricht(byte[] nachricht, String port) {
		Protokoll.getInstanc().protokolliere(
			"Netzwerk",
			"empfange packet an port " + port,
			3,
			Protokoll.TYP.INFO);
		if (!buffer.containsKey(port))
			buffer.put(port, new Vector<byte[]>());
		buffer.get(port).add(nachricht.clone());
	}
}
